Iñigo Alvarez Bianchi

M2.878 · TFM · PEC3: Diseño e implementación del trabajo

2021-2 · Máster universitario en Ciencia de datos (Data science)

Estudios de Informática, Multimedia y Telecomunicación

 

Trabajo de Final del Máster universitario en Ciencia de Datos

Predicción de potenciales compradores en un ecommerce

Importo las libresrías que voy a usar

Carga de los datasets

Cargo los archivos de datos, los compruebo, les hago una preparación básica y los junto en un sólo DataFrame.

USUARIOS

Datos del registro de usuarios

CONSUMOS

Consumos promocionales realizados por usuarios

Elimino los dos campos que el enunciado indica se indica que no hay que usar.

Añado a este dataset las fechas en las que los usuarios se hacen clientes

Veo que hay 717 filas de consumos posteriores a la fecha de alta como cliente que, como indica el enunciado, no resultan relevantes así que se pueden eliminar.

LOGINS

Al igual que con los consumos, entiendo que los logins relevantes son los previos a la fecha en la que el usuario se hace cliente así que elimino los posteriores.

Este campo que he creado se define como el número de logins realizados por cada usuario en fecha no posteior a la de hacerse cliente.

SESIONES

Al igual que con los consumos, entiendo que las sesiones relevantes son las previas a la fecha en la que el usuario se hace cliente así que elimino las posteriores.

Exploración y preparación de los datos

Desbalanceo

Miro cómo están distribuidas las clases. El número de clientes que hay respecto al número de usuarios y las proporciones.

Fechas

Hago una exploración de las fechas de registro y de cliente.

Muestro en unos gráficos temporales la evolución semanal de los registros y de los nuevos clientes.

Repito los gráficos temporales anteriores pero esta vez quitando a los que se hicieron clientes el mismo día del registro. También quito los que se hicieron clientes antes de registrarse ya que no parece una situación normal ni representativa.

Se puede intuir una relación pero a simple vista no resulta fácil concretarla. A continuación muestro un histograma y un diagrama de caja que muestran cuántos días han tardado los clientes en serlo desde su registro. (He quitado los que se hicieron clientes antes del registro o el mismo día.)

A continuación muestro el diagrama de caja y el resumen estadístico sin quitar ningún dato.

Valores perdidos

He eliminado las columnas con más de un 20% de valores nulos por lo que he quitado todas las de tipo USU.

Eliminación campos que no interesan

Informe exploratorio descriptivo

Mediante ProfileReport de pandas_profiling genero un informe descriptivo y exploratorio.

Variables Categóricas

Exploro las distintas variables y preparo las variables categóricas.

TIPOUSUARIO

CANAL_REGISTRO

TIPOEMAIL

Esta variable tiene una cardinalidad demasiado alta, con unos pocos tipos de emails muy frecuentes y muchos minoritarios.

BONDAD_EMAIL

Selección de características

Variables Categóricas

CHI2

Variables numéricas

Correlaciones

ANOVA

El resultado de ANOVA no me indica la eliminación de ninguna variable pero quitaré Ficha Básica por tener una alta correlación con N_sesiones y pareciendo menos explicativa que esta última. También quitaré díasEntreSesiones porque tiene una alta correlación con díasEntreConsumos (parece que aportan una explicabilidad muy similar).

Separación en entrenamiento y test

Preprocesamiento

ONE HOT ENCODING

Recursive Feature Elimination

Data Sampling sobre train

Oversample

Random Oversampling

SMOTE

SMOTENC

Borderline-SMOTE

Borderline-SMOTE SVM

Adaptive Synthetic Sampling (ADASYN)

Undersample

Random Undersample

Near Miss Undersampling

ClusterCentroids

Condensed Nearest Neighbor Rule Undersampling

Edited Nearest Neighbors Rule for Undersampling

Repeated Edited Nearest Neighbours

AllKNN

Instance Hardness Threshold

One-Sided Selection for Undersampling

Neighbourhood Cleaning Rule

Resample

SMOTE and Edited Nearest Neighbors Undersampling

Modelos de clasificación

Modelo base (baseline model)

Regresión logística

Naive-Bayes

K vecinos más próximos

Árbol de decisión

Máquina de soporte vectorial

XGBoost

XGBoost con pesos balanceados

Random Forest

RandomForestClassifier con pesos balanceados

Elección de dataset de Train

Oversampling

Undersampling

Resample

Combinación de técnicas de resampling que mejor resultado han dado

Selección de dataset resampleado

El dataet seleccionado es el resultante de la combinación de SMOTENC, Instance Hardness Threshold y Random Undersample ya que ha sido el que mejor resultado ha dado aplicando un algoritmo Random Forest con pesos balanceados.

Selección del algortimo final

Ajuste del algoritmo seleccionado

Ajuste del algoritmo Random Forest

Ajuste del algoritmo Árbol de decisión

Algoritmo final y validación

Prueba final